package com.atguigu.demo01_mybatisplus.bean;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.math.BigDecimal;
//SELECT id,name,salary,dept_id FROM emp
//SELECT emp_id AS id,emp_name AS name,emp_salary AS salary,dept_id FROM t_emp
@TableName("t_emp")  //映射表名
@Data
public class Emp {
    /*
        如果新增时没有设置主键值，默认使用雪花算法生成一个长度为19位的数值型的 按照时间递增的有序的全局唯一的id
        mp的主键策略：
            1、默认雪花算法:
                type = IdType.ASSIGN_ID
                实体类主键属性类型 可以是long、String或者 BigDecimal类型
                数据库表 主键列类型 可以使用bigint  char varchar.. decimal
                    - bigint最好： 占用存储空间小 8字节
                    - char(19) : utf-8 mb4 存储空间 19*4 = 76字节
            2、数据库主键自增：
                type = IdType.AUTO
            3、不设置，按照全局配置： 如果mp没有配置全局的主键策略，就使用雪花算法
                type = IdType.NONE
            4、UUID生成主键值： 生成32为长度16进制数字组成的全局唯一 无序的id
                type = IdType.ASSIGN_UUID
                过长、无序、由16进制数字的字符组成 过滤性差，不建议使用
       id全局唯一的重要性：
               因为以后单表数据过多会分表存储：
                - 如果使用主键递增，会导致拆分的分片表中有id重复
                - 雪花算法 或者UUID 可以生成全局唯一的主键值，存到分片表中的每一个id都是全局唯一的
                    可以保证分片表没有重复的id

               order1
                    1/2
               order2
                    1/2


     */
//    @TableId(value="emp_id" , type = IdType.ASSIGN_ID) // 映射主键列名
//    @TableId(value="emp_id" , type = IdType.AUTO) // 映射主键列名
//    @TableId(value="emp_id" , type = IdType.NONE) // 映射主键列名
    @TableId(value="emp_id" , type = IdType.ASSIGN_UUID) // 映射主键列名
    private Long id;
    @TableField(value = "emp_name") //映射普通列的名称
    private String name;
    @TableField(value = "emp_salary")
    private BigDecimal salary;
//    @TableField(value = "emp_name")
    private Long deptId;
    @TableLogic //标注的属性为逻辑删除属性
    // mp对有逻辑删除的字段 执行 删除方法时 改用更新逻辑删除字段的值为true
    //       执行 查询 更新时，会自动在 where条件中添加 逻辑删除字段条件
    @TableField(value = "is_deleted")
    private Boolean deleted; // isXxx 一般是boolean基本类型的get方法！ 属性名不建议叫isXxx
}
